package org.i1510.common.controller;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.validation.Valid;

import net.sf.json.JSONArray;

import org.i1510.common.bean.PageBean;
import org.i1510.common.dao.ISysRoleDao;
import org.i1510.common.dao.ISysRolePopDao;
import org.i1510.common.po.SysRole;
import org.i1510.common.po.SysRolePop;
import org.i1510.common.service.ISysRolePopService;
import org.i1510.common.service.ISysRoleService;
import org.i1510.common.utils.DateUtils;
import org.i1510.common.utils.IDGenerator;
import org.i1510.common.utils.KBProperties;
import org.i1510.common.utils.PrintWriterUtils;
import org.i1510.common.utils.StringUtils;
import org.i1510.common.utils.UserUtils;
import org.i1510.common.utils.web.ResultMapper;
import org.i1510.common.utils.web.WebUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.validation.BindingResult;
import org.springframework.web.bind.annotation.ModelAttribute;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.ResponseBody;

@Controller
@RequestMapping(value = "/admin/sysRole")
public class SysRoleController {
	private static final Logger logger = LoggerFactory
			.getLogger(SysRoleController.class);
	@Autowired
	private ISysRoleService iSysRoleService;
	@Autowired
	private ISysRoleDao iSysRoleDao;
	
	@Autowired
	private ISysRolePopService iSysRolePopService;
	@Autowired
	private ISysRolePopDao iSysRolePopDao;

	private ResultMapper mapper;

	@RequestMapping(value = "/saveRolePop", method = RequestMethod.POST)
	@ResponseBody
	public String saveRolePop(HttpServletRequest request,@Valid @ModelAttribute("popIds") String popIds,
			@Valid @ModelAttribute("sysRole") SysRole sysRole,
			BindingResult errors) {
		ResultMapper mapper = ResultMapper.generateFailure();
		String[] pops = popIds.split(",");
		List<SysRolePop> list = new ArrayList<SysRolePop>();
		for (int i = 0; i < pops.length; i++) {
			SysRolePop sysRolePop = new SysRolePop();
			sysRolePop.setDocId(IDGenerator.getGenerateID());
			sysRolePop.setFdPopId(pops[i]);
			sysRolePop.setFdRoleId(sysRole.getDocId());
			sysRolePop.setDocCreateTime(DateUtils.getNow());
			sysRolePop.setDocCreator(UserUtils.getSessionUserBean(request).getSysUser().getDocId());
			list.add(sysRolePop);
		}
		if (errors.hasErrors()) {
			mapper = WebUtils.getMapper4Errors(errors);
		} else {
			iSysRolePopDao.deleteByFdRoleId(sysRole.getDocId());
			mapper = iSysRolePopService.saveAll(list);
		}

		return mapper.toJson();
	}
	
	@RequestMapping(value = "/findTreeChecked", method = RequestMethod.POST)
	@ResponseBody
	public String findTreeChecked(HttpServletRequest request,
			HttpServletResponse response,
			@Valid @ModelAttribute("sysRole") SysRole sysRole,
			BindingResult errors) {

		Map conditions = new HashMap();
		List list = iSysRoleService.findRolePop(sysRole, conditions);
		JSONArray jsonArray = new JSONArray();
		if (list.size() > 0) {
			jsonArray = JSONArray.fromObject(list);
		}
		PrintWriterUtils write = new PrintWriterUtils();
		write.sendPrintWriterUtils(response, jsonArray.toString(), "json");
		return null;
	}

	/**
	 * @Author Rambo
	 * @Desc：保存对象
	 * @param sysRole
	 * @param errors
	 * @return TODO
	 * @Version SysRoleController.java,v 1.1 2013-11-15 下午4:20:56
	 */
	@RequestMapping(value = "/save", method = RequestMethod.POST)
	@ResponseBody
	public String save(HttpServletRequest request,
			@Valid @ModelAttribute("sysRole") SysRole sysRole,
			BindingResult errors) {

		if (errors.hasErrors()) {
			mapper = WebUtils.getMapper4Errors(errors);
		} else {
			sysRole.setDocStatus("10");
			mapper = iSysRoleService.save(sysRole, request);
		}

		return mapper.toJson();
	}

	/**
	 * @Author Rambo
	 * @Desc：删除对象
	 * @param docId
	 * @param errors
	 * @return TODO
	 * @Version SysRoleController.java,v 1.1 2014-9-2 下午3:38:17
	 */
	@RequestMapping(value = "/deleteX", method = RequestMethod.POST)
	@ResponseBody
	public String deleteX(@Valid @ModelAttribute("docId") String docId,
			BindingResult errors) {

		if (errors.hasErrors()) {
			mapper = WebUtils.getMapper4Errors(errors);
		} else {
			mapper = iSysRoleService.delete(docId);
		}

		return mapper.toJson();
	}

	/**
	 * @Author Rambo
	 * @Desc：查看对象
	 * @param docId
	 * @param errors
	 * @return TODO
	 * @Version SysRoleController.java,v 1.1 2014-9-2 下午3:39:35
	 */
	@RequestMapping(value = "/view", method = RequestMethod.GET)
	@ResponseBody
	public String view(@Valid @ModelAttribute("docId") String docId,
			BindingResult errors) {
		ResultMapper mapperRtn = ResultMapper.generateFailure();
		if (errors.hasErrors()) {
			mapperRtn = WebUtils.getMapper4Errors(errors);
		} else {
			SysRole sysRole = iSysRoleService.findById(docId);
			mapperRtn = ResultMapper.generateSuccess();
			mapperRtn.appendResult("data", sysRole);
		}
		return mapperRtn.toJson();
	}

	@RequestMapping(value = "/list", method = RequestMethod.GET)
	@ResponseBody
	public String list(@ModelAttribute("fromDate") String fromDate,
			@ModelAttribute("toDate") String toDate,
			@Valid @ModelAttribute("sysRole") SysRole sysRole,
			@Valid @ModelAttribute("pageBean") PageBean pageBean,
			BindingResult errors) {
		ResultMapper mapperRtn = ResultMapper.generateFailure();
		if (errors.hasErrors()) {
			mapperRtn = WebUtils.getMapper4Errors(errors);
		} else {
			Map conditions = new HashMap();
			conditions.put("fromDate", fromDate);
			conditions.put("toDate", toDate);
			List sysRoles = iSysRoleService.getPage(sysRole, pageBean,
					conditions);
			int totalCount = iSysRoleService.getPageCount(sysRole, conditions);
			Map map = new HashMap();
			map.put("pageNo", pageBean.getPageNo());
			map.put("pageSize", pageBean.getPageSize());
			map.put("totalCount", totalCount);
			map.put("listData", sysRoles);

			mapperRtn = ResultMapper.generateSuccess();
			mapperRtn.appendResult("data", map);
		}
		return mapperRtn.toJson();
	}

	@RequestMapping(value = "/listExt", method = { RequestMethod.POST,
			RequestMethod.GET })
	@ResponseBody
	public String listExt(@Valid @ModelAttribute("start") String start,
			@Valid @ModelAttribute("limit") String limit,
			@Valid @ModelAttribute("sysRole") SysRole sysRole,
			@Valid @ModelAttribute("pageBean") PageBean pageBean,
			@Valid @ModelAttribute("sDocSubject") String sDocSubject,
			BindingResult errors) {
		ResultMapper mapperRtn = ResultMapper.generateFailure();
		if (errors.hasErrors()) {
			mapperRtn = WebUtils.getMapper4Errors(errors);
		} else {
			Map conditions = new HashMap();
			conditions.put("sDocSubject", sDocSubject);
			if (!"".equals(start) && !"".equals(limit)) {
				pageBean.setIntPageIndex(StringUtils.String2Integer(start) != 0 ? (StringUtils
						.String2Integer(start)) : 0);
				pageBean.setIntPageSize(StringUtils.String2Integer(limit) != 0 ? (StringUtils
						.String2Integer(limit)) : 0);
			} else {
				pageBean.setIntPageIndex(0);
				pageBean.setIntPageSize(KBProperties.PAGESIZE);
			}
			List list = iSysRoleService.getPage(sysRole, pageBean, conditions);
			int totalCount = iSysRoleService.getPageCount(sysRole, conditions);
			mapperRtn = ResultMapper.generateSuccess();
			mapperRtn.appendResult("total", totalCount);
			mapperRtn.appendResult("root", list);
		}
		return mapperRtn.toJson();
	}

	/**
	 * @Author Rambo
	 * @Desc：状态修改
	 * @param request
	 * @param docId
	 * @param docStatus
	 * @param errors
	 * @return TODO
	 * @Version CateController.java,v 1.1 2014-9-11 上午10:06:04
	 */
	@RequestMapping(value = "/updateStatus", method = RequestMethod.POST)
	@ResponseBody
	public String updateStatus(HttpServletRequest request,
			@Valid @ModelAttribute("docId") String docId,
			@Valid @ModelAttribute("docStatus") String docStatus,
			BindingResult errors) {

		if (errors.hasErrors()) {
			mapper = WebUtils.getMapper4Errors(errors);
		} else {
			if (!StringUtils.isStringEmpty(docId)) {
				SysRole sysRole = new SysRole();

				sysRole.setDocId(docId);
				sysRole.setDocStatus(docStatus);
				mapper = iSysRoleService.save(sysRole, request);
			} else {
				mapper = ResultMapper.generateFailure();
				mapper.appendResult("messages", "无法找到该ID!");
			}

		}

		return mapper.toJson();
	}
}